﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;

namespace DiaryPlanner
{


    public partial class Regular : Form
    {

        public ArrayList RegList = new ArrayList();
        public RegPost nowRegPost;

        public Regular()
        {
            InitializeComponent();
            skinSet();
            initReg_db();
        }
        public void skinSet()
        {
            string skin = UserProfile.Instance().setting;
            if (skin == "b")
            {
                this.BackColor = System.Drawing.Color.PaleTurquoise;

            }
            else if (skin == "c")
            {
                this.BackColor = System.Drawing.Color.LawnGreen;
            }
            else if (skin == "d")
            {
                this.BackColor = System.Drawing.Color.MistyRose;

            }
            else
            { //skin=="a"
                this.BackColor = System.Drawing.SystemColors.ControlLight;

            }
        }

        //private void btnRegNew_Click(object sender, EventArgs e)
        //{

        //}

        public void viewAllReg()
        { //RegList에 있는 메모들을 나열해준다.

            //Regsize 216*276

            RegPanel.Controls.Clear();
            int count = RegList.Count;

            foreach (RegPost mp in RegList)
            {
                count--;
                RegPost nmp = mp;

                //mp.RegText.BackColor = System.Drawing.Color.Yellow;
                RegPanel.Controls.Add(mp);
                mp.Location = new Point(6, 6 + 20 * (count));

            }

        }

        private void btnNewReg_Click(object sender, EventArgs e)
        {
            RegNew RegNewObject = new RegNew(this);//새 메모를 입력하는 다이얼로그
            RegNewObject.ShowDialog();
            initReg_db();
        }

        private void initReg_db()
        {
            RegList.Clear();
            try //예외처리문
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                        + "data source = "  //데이터 소스=(경로입력하라는거)
                                        + Application.StartupPath ///상대경로 읽어옴
                                        + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름
                string commandString = "";
                commandString = "Select * from [reg_acc]";
                //reg_acc테이블에 있는 모든필드들을 모두 검색해라.
                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "reg_acc"); //DS라는 데이터셋에 새로운 Accs 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["reg_acc"];//home테이블을 불러와 aTable을 새로 생성해서 저장

                //DBAdapter.Fill(aTable);

                for (int i = 0; i < aTable.Rows.Count; i++)
                {
                    if (aTable.Rows[i].ItemArray[6].ToString() == UserProfile.Instance().userId)
                    {
                        add_Reg(aTable.Rows[i].ItemArray[0].ToString(), aTable.Rows[i].ItemArray[1].ToString(), aTable.Rows[i].ItemArray[2].ToString(), aTable.Rows[i].ItemArray[3].ToString(), aTable.Rows[i].ItemArray[4].ToString(), aTable.Rows[i].ItemArray[5].ToString());
                    }
                }

                this.viewAllReg();
            }
            catch (DataException DE) //DataException에러 발생확인하는 catch문
            {
                MessageBox.Show(DE.Message); //DataExpception 에러 발생시 메세지박스로 에러값을 출력해라.
            }
            catch (Exception DE) //Exception에러 발생확인하는 catch문
            {
                MessageBox.Show(DE.Message);//Expception 에러 발생시 메세지박스로 에러값을 출력해라.
            }
        }

        private void add_Reg(string code, string name, string join_date, string pay_date, string type, string price)
        {
            RegPost thisRegPost = new RegPost(this);
            thisRegPost.RegCode.Text = code;
            thisRegPost.RegName.Text = name;
            thisRegPost.RegPrice.Text = price + "원";
            thisRegPost.RegMonth.Text = join_date;
            thisRegPost.RegDay.Text = pay_date;
            if (type == "1") thisRegPost.RegType.Text = "월수입";
            if (type == "0") thisRegPost.RegType.Text = "월지출";

            this.RegList.Add(thisRegPost);//Regpost 배열에 추가
        }

        private void reflashBtn_Click(object sender, EventArgs e)
        {
            initReg_db();
        }


    }
}
